Python-এ missing data বা null values (যাকে NaN - Not a Number বলা হয়) ডেটা সেটের একটি সাধারণ সমস্যা। Pandas লাইব্রেরি এই সমস্যা সমাধানের জন্য কার্যকরী মেথড সরবরাহ করে, যেমন fillna() এবং dropna(), যা ডেটাতে মিসিং বা NaN মান পরিচালনা করতে সহায়ক। এই দুটি মেথডের সাহায্যে আপনি মিসিং ডেটা অলম্বন (fill) বা অপসারণ (drop) করতে পারেন।
১. fillna() মেথড
fillna() মেথডটি মিসিং ডেটাকে নির্দিষ্ট মান দিয়ে পূর্ণ করতে ব্যবহৃত হয়। এটি ডেটাতে যেকোনো NaN বা মিসিং ভ্যালুকে সরাসরি নির্দিষ্ট কোনো মান দ্বারা প্রতিস্থাপন করে।
Syntax:
DataFrame.fillna(value=None, method=None, axis=None, inplace=False)
- value: পূর্ণ করার জন্য একটি নির্দিষ্ট মান (যেমন:
0,mean,median, ইত্যাদি)। - method: "ffill" (forward fill) বা "bfill" (backward fill) পদ্ধতি ব্যবহার করা যেতে পারে।
- axis: 0 (rows) বা 1 (columns) দ্বারা নির্দেশিত হয়।
- inplace: যদি
Trueহয়, তাহলে পরিবর্তন DataFrame-এ সরাসরি করা হয়, নইলে নতুন DataFrame তৈরি হয়।
উদাহরণ:
import pandas as pd
import numpy as np
# DataFrame তৈরি
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, np.nan, 30, np.nan],
'Salary': [50000, 60000, np.nan, 80000]}
df = pd.DataFrame(data)
# মিসিং ডেটা পূর্ণ করা (Age কলামে NaN পূর্ণ করা)
df['Age'] = df['Age'].fillna(df['Age'].mean()) # Age এর গড় মান দিয়ে পূর্ণ
# Salary কলামে NaN পূর্ণ করা
df['Salary'] = df['Salary'].fillna(75000) # নির্দিষ্ট মান দিয়ে পূর্ণ
print(df)
Output:
Name Age Salary
0 Alice 25.0 50000
1 Bob 27.5 60000
2 Charlie 30.0 75000
3 David 27.5 80000
এখানে, Age কলামের মিসিং ভ্যালু গড় মান দিয়ে পূর্ণ করা হয়েছে এবং Salary কলামের মিসিং ভ্যালু একটি নির্দিষ্ট মান (75000) দিয়ে পূর্ণ করা হয়েছে।
method প্যারামিটার:
- "ffill" (Forward Fill): এটি পূর্ববর্তী মান দ্বারা মিসিং ডেটা পূর্ণ করবে।
- "bfill" (Backward Fill): এটি পরবর্তী মান দ্বারা মিসিং ডেটা পূর্ণ করবে।
# Forward fill ব্যবহার
df['Age'] = df['Age'].fillna(method='ffill')
২. dropna() মেথড
dropna() মেথডটি মিসিং বা NaN ভ্যালু ধারণকারী সারি বা কলাম মুছে ফেলতে ব্যবহৃত হয়। এটি ব্যবহার করে আপনি যেকোনো সারি বা কলাম যা মিসিং ভ্যালু ধারণ করে তা সরিয়ে ফেলতে পারেন।
Syntax:
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
- axis: 0 (rows) বা 1 (columns)। 0 হলে সারি বাদ দেয়, 1 হলে কলাম বাদ দেয়।
- how: 'any' বা 'all'। 'any' হলে যে কোন মিসিং ডেটা থাকলে সারি বা কলামটি বাদ দেওয়া হবে, 'all' হলে শুধুমাত্র সবগুলো মান মিসিং থাকলে বাদ দেওয়া হবে।
- thresh: ন্যূনতম ভ্যালু সংখ্যা, যা সারি বা কলামে থাকতে হবে (যেমন, কমপক্ষে 2টি মান থাকতে হবে)।
- subset: যে কলামগুলিতে মিসিং ডেটা পরীক্ষা করা হবে।
- inplace: যদি
Trueহয়, তাহলে পরিবর্তন সরাসরি DataFrame-এ করা হয়।
উদাহরণ:
# DataFrame তৈরি
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, np.nan, 30, np.nan],
'Salary': [50000, 60000, np.nan, 80000]}
df = pd.DataFrame(data)
# মিসিং ডেটা সহ সারি বাদ দেয়া
df_cleaned = df.dropna(axis=0, how='any') # যে সারিতে NaN থাকবে তা বাদ দিবে
print(df_cleaned)
Output:
Name Age Salary
0 Alice 25.0 50000
এখানে, যেকোনো সারি যা মিসিং ডেটা ধারণ করে (যেমন, সারি 1 এবং সারি 3) তা বাদ দেওয়া হয়েছে।
how প্যারামিটার:
- "any": যদি একটি মিসিং ভ্যালু থাকে, তাহলে সারি বা কলামটি বাদ দেয়।
- "all": যদি সমস্ত মান মিসিং থাকে, তাহলে সারি বা কলামটি বাদ দেয়।
# সমস্ত কলামে NaN থাকতে হলে কলাম বাদ দেয়া
df_cleaned = df.dropna(axis=1, how='all')
dropna() এবং fillna() এর মধ্যে পার্থক্য
| মেথড | বর্ণনা |
|---|---|
fillna() | মিসিং ডেটাকে নির্দিষ্ট মান দিয়ে পূর্ণ করা। |
dropna() | মিসিং ডেটা সম্পূর্ণ সারি বা কলাম থেকে বাদ দেয়া। |
সারাংশ
fillna()মেথডটি মিসিং ডেটা পূর্ণ করতে ব্যবহৃত হয়, যা সাধারণত গড় (mean), গুণ (mode), বা নির্দিষ্ট মানের মাধ্যমে পূর্ণ করা হয়।dropna()মেথডটি মিসিং ডেটা ধারণকারী সারি বা কলাম বাদ দিতে ব্যবহৃত হয়।
এটি আপনাকে ডেটা ক্লিনিং এবং প্রিপ্রসেসিং-এর জন্য গুরুত্বপূর্ণ হাতিয়ার সরবরাহ করে, যার মাধ্যমে আপনি ডেটা বিশ্লেষণ এবং মডেল ট্রেনিংয়ের জন্য প্রস্তুত করতে পারেন।
Read more